package dletc.demo;

public class demo07 {
	
	/**
	 * finally代码块面试题：记住 经典 面试题
	 * 
	 * java中语法规则（有一些规则是不能破话的，一旦这么说了，就必须这么做！）
	 * 		java中有一条这样的规则：
	 * 			方法体中的代码必须遵守自上而下的顺序依次逐句执行（亘古不变）
	 * 		java语句中还有一条规则：
	 * 			return语句一旦执行，整个方法必须结束（亘古不变）。
	 */

	public static void main(String[] args) {
		
		int m = m();
		System.out.println(m); //结果为100
	}

	private static int m() {
		int i = 100;
		try{
			//这行代码出现在 int i = 100的下面 ，所以最终结果必须是返回100.
			//return语句还必须保证是最后执行的，一旦执行方法结束。
			return i;
		}finally {
			// 从反编译可以看出 i++在return之前执行，但是JVM创建了j，将i赋值给了j  return返回的是j的值。
			i++;
		}
		
	}
	/**
	 * 反编译之后的效果：
	 * public static int m(){
	 * 		int i = 100;
	 * 		int j = i;
	 * 		i++;
	 * 		return j;
	 * }
	 */

}
